﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Wicresoft.SMS.Common;

namespace Wicresoft.SMS.Data
{
    public interface IDataProvider
    {
        /// <summary>
        ///  显示打开链接，应用在批量操作数据时，最后调用EndConnect关闭连接
        ///  如果已打开将不作操作
        /// </summary>
        //void BeginConnect();
        /// <summary>
        /// 显示关闭链接，无论在批量或单个操作时都需要调用
        /// </summary>
        //void EndConnect();
        /// <summary>
        /// 内部调用BeginConnect打开链接，返回一个根据优先级排序完成的SMSRecord队列，表示待发送状态的短信
        /// </summary>
        /// <returns></returns>
        IEnumerable<SMSRecord> GetMsgToBeSended();
        /// <summary>
        /// 内部调用BeginConnect打开链接，返回一个根据优先级排序完成的SMSRecord队列，表示正在发送状态的短信
        /// </summary>
        /// <returns></returns>
        IEnumerable<SMSRecord> GetMsgSending();
        /// <summary>
        /// 内部调用BeginConnect打开链接，标记某条发送成功
        /// </summary>
        /// <param name="List<KeyandMessageId>">传入数据库中的主键ID和MessageId集合</param>
        List<Email> SetMsgSendingSuccess(List<KeyandMessageId> keyandMessageId);
        
        /// <summary>
        /// 内部调用BeginConnect打开链接，标记某条发送失败。如果当前批次的短信全部发送完毕，将调用发送邮件逻辑
        /// </summary>
        /// <param name="List<KeyandMessageId>">传入数据库中的主键ID和MessageId集合，其中MessageId为空</param>
        /// <returns>返回发送Email的信息集合</returns>
        List<Email> SetMsgSendingFailed(List<KeyandMessageId> keyandMessageId);

     
    }
}
